package system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import common.model.po.SysRole;
import common.model.request.base.PaginationRequest;
import common.model.response.base.Result;
import system.model.request.SaveRoleRequest;
import system.model.request.SaveUserRoleRequest;
import system.model.request.SearchRoleRequest;

import java.util.List;
import java.util.Map;

/**
 * 服务类
 *
 * @author 米泽鹏
 * @since 2022-03-11
 */
public interface SysRoleService extends IService<SysRole> {

	/**
	 * 根据用户id查询该用户具有的所有角色
	 *
	 * @param userId 用户id
	 * @return 该用户具有的所有角色
	 */
	List<SysRole> getRolesByUserId(Long userId);

	/**
	 * 角色分页查询
	 *
	 * @param paginationRequest PaginationRequest<SearchItemRequest, GItem>
	 * @return Page<SysRole>
	 */
	Page<SysRole> pageRole(PaginationRequest<SearchRoleRequest, SysRole> paginationRequest);

	/**
	 * 角色新增或更新
	 *
	 * @param request SaveRoleRequest
	 * @return Result
	 */
	Result<?> saveRole(SaveRoleRequest request);

	/**
	 * 角色删除
	 *
	 * @param id 角色id
	 * @return Result
	 */
	Result<?> deleteRole(Long id);

	/**
	 * 分配用户
	 *
	 * @param request SaveUserRoleRequest
	 * @return Result
	 */
	Result<?> saveUserRole(SaveUserRoleRequest request);

	/**
	 * 获取用户角色信息
	 *
	 * @param roleId Long 角色id
	 * @return Result<Map < String, List < SysUser>>>
	 */
	Result<Map<String, List<?>>> getUserRoleInfo(Long roleId);

}
